#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
int main() {
    // 创建管道
    int pipe_fds[2];
    if (pipe(pipe_fds) == -1) {
        perror("Pipe creation failed");
        return 1;
    }
    // 创建子进程
    pid_t pid = fork();
    if (pid < 0) {
        perror("Fork failed");
        return 1;
    } else if (pid > 0) { // 父进程
        // 关闭不需要的管道读端
        close(pipe_fds[0]);
        // 向管道写端写入数据
        const char* message = "Hello from parent!";
        write(pipe_fds[1], message, strlen(message) + 1);
        // 发送EOF以结束消息
        close(pipe_fds[1]);
        // 等待子进程结束
        wait(NULL);
        printf("Parent finished.\n");
    } else { // 子进程
        // 关闭不需要的管道写端
        close(pipe_fds[1]);
        // 从管道读端读取数据
        char buffer[100];
        int bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1);
        if (bytes_read != -1) {
            buffer[bytes_read] = '\0'; // 添加字符串结束符
            printf("Child received: %s\n", buffer);
        } else {
            perror("Read from pipe failed");
        }
        // 关闭管道读端
        close(pipe_fds[0]);
    }
    return 0;
}